#导入爬虫所需要的包
import requests
from bs4 import BeautifulSoup
#定义列表，将爬虫结果存入列表中
lst=[]
#定义两个计数器，方便知道爬虫进展情况
num=0
page=0
#书籍信息存放在50个页面，通过发现页面url的特征，构造遍历循环
for i in range(1,51):
    url='http://books.toscrape.com/catalogue/page-%d.html'%i
    r=requests.get(url)
    r.raise_for_status()
    bs=BeautifulSoup(r.text,'html.parser')
    #每个页面有20个图书信息，抓取这20本图书信息的链接，进入到每本书的详细页面
    li_list=bs.find_all('li',class_='col-xs-6 col-sm-4 col-md-3 col-lg-3')
    lst1=[]
    #获取每本书的信息
    for li in li_list:
        url1=li.a['href']
        url2='http://books.toscrape.com/catalogue/'+url1
        r = requests.get(url2)
        r.raise_for_status()
        bs = BeautifulSoup(r.text, 'html.parser')
        picture = bs.find('div', class_='item active').img['src']#获取图书封面图片
        title = bs.find('div', class_='col-sm-6 product_main').h1.text#获取图书名字
        price = bs.find('div', class_='col-sm-6 product_main').p.text#获取图书价格
        stock = bs.find('p', class_='instock availability').text.strip()#获取图书库存
        rate = bs.find('div', class_='col-sm-6 product_main').find_all('p')[2]['class'][1]#获取图书评分
        category = bs.find('ul', class_='breadcrumb').find_all('li')[2].text.strip('\n')#获取图书所属分类
        description = bs.find('article', class_='product_page').find_all('p')[3].text#获取图书产品介绍
        dic = {'title': title, 'picture': picture, 'price': price, 'stock': stock, 'rate': rate, 'category': category,
               'description': description} #建立字典，存储一本书的上述信息
        lst1.append(dic)#将字典作为一个元素，将每个页面的20本书的信息存入到列表lst1中
        num+=1
        print('已读取完%d本书'%num)
    lst.extend(lst1)#将所有页面的图书信息存入到列表lst中
    page+=1
    print('已读取完第%d页'%page)
print(len(lst))
print(lst)

